package com.zhn;

import java.util.LinkedList;
import java.util.Queue;

/**
 * 给你一棵 完全二叉树 的根节点 root ，求出该树的节点个数。
 *
 * 完全二叉树 的定义如下：在完全二叉树中，除了最底层节点可能没填满外，其余每层节点数都达到最大值，
 * 并且最下面一层的节点都集中在该层最左边的若干位置。若最底层为第 h 层，则该层包含 1~ 2h 个节点。
 */
public class CountNodes {
    //层次遍历计数
    public int countNodes(TreeNode root) {
        if(root == null) return 0;
        Queue<TreeNode> que = new LinkedList<>();
        que.add(root);
        int count = 0;
        while(!que.isEmpty()){
            int len = que.size();
            while (len-- > 0){
                TreeNode poll = que.poll();
                count++;
                if(poll.left != null) que.add(poll.left);
                if(poll.right != null) que.add(poll.right);
            }
        }
        return count;
    }
}
